package com.bestcem.xm.ticket.dao;

import com.bestcem.xm.ticket.controller.param.PageParam;
import com.bestcem.xm.ticket.entity.mongo.TicketConfig;
import com.bestcem.xm.ticket.entity.mongo.TicketTemplateV2;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author xuan.yang <xuan.yang@idiaoyan.com>
 * @version v2.3
 * @date 2021/9/2 14:54
 */
public interface TemplateDao {
    /**
     * 模板分页
     *
     * @param type      模板类型
     * @param pageParam 分页参数
     * @param orgId     公司id
     * @return 模板集合
     * @author ympan <yuming.pan@idiaoyan.com>
     * @date 16:37 2021/9/2
     */
    List<TicketTemplateV2> listTemplate(Integer type, PageParam pageParam, String orgId, boolean listAllFlag);

    /**
     * 插入模板
     *
     * @param ticketTemplateV2
     * @return
     */
    TicketTemplateV2 insertTemplate(TicketTemplateV2 ticketTemplateV2);


    /**
     * 批量保存模板
     *
     * @param ticketTemplateV2List 模板列表
     * @return List<TicketTemplateV2> 成功列表
     * @author jy.zhao
     * @date 2021/11/10 17:07
     **/
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
    List<TicketTemplateV2> batchInsertTemplate(List<TicketTemplateV2> ticketTemplateV2List);

    /**
     * 通过模板id获取详情
     *
     * @param templateId
     * @return
     */
    TicketTemplateV2 getTemplateById(String templateId);

    /**
     * 根据组织id和模板名称查询模板
     *
     * @param orgId 组织id
     * @param name  名称
     * @return TicketTemplateV2
     * @author jy.zhao
     * @date 2021/9/7 13:23
     **/
    TicketTemplateV2 getTemplateByName(String orgId, String name);

    /**
     * 根据模板id删除模板
     *
     * @param templateId
     * @return
     */
    Integer deleteTemplateById(String templateId);

    /**
     * 根据模板id等信息更新模板
     *
     * @param ticketTemplateV2 模板更新相关信息
     * @param updateTime       是否更新 修改时间
     * @return 修改成功个数
     * @author ympan <yuming.pan@idiaoyan.com>
     * @date 11:08 2021/9/4
     */
    long updateTemplate(TicketTemplateV2 ticketTemplateV2, boolean updateTime);

    /**
     * 得到最近使用的模板
     *
     * @param orgId
     * @param userId
     * @return
     * @deprecated 220114时, 没人使用这个方法, 就不写实现了
     */
    @Deprecated
    TicketConfig getRecentUseTemplate(String orgId, String userId);

    /**
     * 查询模板数量
     *
     * @param type  模板类型
     * @param orgId
     * @return 模板数量
     * @author ympan <yuming.pan@idiaoyan.com>
     * @date 15:19 2021/9/8
     */
    long getTemplateCount(Integer type, String orgId);

    /**
     * 根据模板id和公司id查询模板
     *
     * @param id    模板id
     * @param orgId 公司id
     * @return 模板
     * @author ympan <yuming.pan@idiaoyan.com>
     * @date 17:26 2021/9/9
     */
    TicketTemplateV2 getTemplateByIdAndOrgId(String id, String orgId);

    /**
     * 根据orgid和公司id查询模板
     *
     * @param orgId 模板id
     * @param name  公司id
     * @return 模板
     * @author ympan <yuming.pan@idiaoyan.com>
     * @date 17:26 2021/9/9
     */
    List<TicketTemplateV2> getTemplateByOrgIdAndName(String orgId, String name);

    /**
     * 仅修改模板名称
     *
     * @param id     模板id
     * @param name   模板名称
     * @param userId 用户id
     * @return
     * @author ympan <yuming.pan@idiaoyan.com>
     * @date 15:46 2021/9/14
     */
    Long updateTemplateName(String id, String name, String userId);

    /**
     * 根据id列表查出模板
     */
    List<TicketTemplateV2> listTemplateByIds(List<String> ids);

    /**
     * 查出详情和模板列表
     */
    List<TicketTemplateV2> getDefaultTemplate(String orgId);

    /**
     * 找到指定类型默认模板
     *
     * @param orgId
     * @param type
     * @return
     */
    TicketTemplateV2 getDefaultTemplate(String orgId, Integer type);

    /**
     * 查询 findByConfigId 信息
     *
     * @param configId
     * @return TicketTemplate
     * @version v1.0
     * @author gy.liu
     * @date 2021/8/17
     * @deprecated 220114时, 没人使用这个方法, 就不写实现了
     */
    @Deprecated
    TicketTemplateV2 findByConfigId(String configId);

    /**
     * 根据ticketConfigId查询 TicketRule
     *
     * @param ticketConfigId
     * @return java.util.List<com.bestcem.xm.ticket.entity.mongo.TicketTemplateV2>
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/9/28 13:44
     */
    List<TicketTemplateV2> listByTicketConfigId(String ticketConfigId);
}
